<?php
class Controller {
	
	public function __construct() {}
	public function run() {
		$action = Request::post('action', 'string', false);
		
		if($action !== false && method_exists($this, $action . 'Action'))
	 		$this->_action = strtolower($action) . 'Action';
	 	else
	 		$this->_action = 'indexAction';
	 	$this->{$this->_action}();
	}
	public function indexAction(){
		$template = new Template();
//		$template->lang = 
		$template->url = '/install/index.php';
		$template->dict = require './lang/en.php';
		echo $template->render('./templates/install.php');
	}
	
	public function firstchackAction() {
		$docroot = $_SERVER['DOCUMENT_ROOT'];
		
		$data = array();
		/**
		 * проверка версии PHP
		 */
		$data['phpVer']['title'] = 'Версия PHP >= 5.3.5';
		if (version_compare(PHP_VERSION, '5.3.5', '<')) {
			$data['phpVer']['success'] = false;
			$data['phpVer']['error'] = 'Ваша версия ' . PHP_VERSION;
		} else
			$data['phpVer']['success'] = true;
		
		/**
		 * Проверка возможности записи в каталог /js/cache
		 */
		$data['dirWchach']['title'] = 'Возможность записи в каталог /js/cache';
		if (!is_writable($docroot . '/js/cache')) {
			$data['dirWchach']['success'] = false;
			$data['dirWchach']['error'] = 'Запись запрещена';
		} else
			$data['dirWchach']['success'] = true;
		
		/**
		 * Проверка возможности записи в каталог /media
		 */
		$data['dirWmedia']['title'] = 'Возможность записи в каталог /media';
		if (!is_writable($docroot . '/media')) {
			$data['dirWmedia']['success'] = false;
			$data['dirWmedia']['error'] = 'Запись запрещена';
		} else
			$data['dirWmedia']['success'] = true;
		
		/**
		 * Проверка возможности записи в каталог /system/packages
		 */
		$data['dirWpackages']['title'] = 'Возможность записи в каталог /system/packages';
		if (!is_writable($docroot . '/system/packages')) {
			$data['dirWpackages']['success'] = false;
			$data['dirWpackages']['error'] = 'Запись запрещена';
		} else
			$data['dirWpackages']['success'] = true;
		
		/**
		 * Проверка возможности записи в каталог /system/config
		 */
		$data['dirWsysconf']['title'] = 'Возможность записи в каталог /system/config';
		if (!is_writable($docroot . '/system/config')) {
			$data['dirWsysconf']['success'] = false;
			$data['dirWsysconf']['error'] = 'Запись запрещена';
		} else
			$data['dirWsysconf']['success'] = true;
		
		/**
		 * Проверка возможности записи в каталог /system/config/objects
		 */
		$data['dirWobj']['title'] = 'Возможность записи в каталог /system/config/object';
		if (!is_writable($docroot . '/system/config/object')) {
			$data['dirWobj']['success'] = false;
			$data['dirWobj']['error'] = 'Запись запрещена';
		} else
			$data['dirWobj']['success'] = true;
		
		/**
		 * Проверка возможности записи в каталог /system/config
		 */
		$data['dirWconfig']['title'] = 'Возможность записи в каталог /system/config';
		if (!is_writable($docroot . '/system/config')) {
			$data['dirWconfig']['success'] = false;
			$data['dirWconfig']['error'] = 'Запись запрещена';
		} else
			$data['dirWconfig']['success'] = true;
		
		/**
		 * Проверка возможности записи в каталог /.backups
		 */
		$data['dirWbackups']['title'] = 'Возможность записи в каталог /.backups';
		if (!is_writable($docroot . '/.backups')) {
			$data['dirWbackups']['success'] = false;
			$data['dirWbackups']['error'] = 'Запись запрещена';
		} else
			$data['dirWbackups']['success'] = true;
		
		/**
		 * Проверка наличия библиотеки gd
		 */
		$data['gd']['title'] = 'Наличие библиотеки GD';
		if (version_compare(@GD_VERSION, '0', '<')) {
			$data['gd']['success'] = false;
			$data['gd']['error'] = 'Возможно бибдиотека не установлена';
		} else
			$data['gd']['success'] = true;
		
		/**
		 * Проверка наличия библиотеки  memcache  or  memcached
		 */
		$phpExt = get_loaded_extensions();
		$data['memcache']['title'] = 'Наличие библиотеки  memcache  or  memcached';
		if ((in_array('memcache', $phpExt, true)) || (in_array('memcached', $phpExt, true))) {
			$data['memcache']['success'] = true;
		} else {
			$data['memcache']['success'] = true;
			$data['memcache']['error'] = 'Если у вас не установлены memcache или memcached вы потеряете в производительности системы';
		}
		
		/**
		 * Проверка возможности записи в каталог /js/lang
		 */
		$data['dirWlang']['title'] = 'Возможность записи в каталог /js/lang';
		if (!is_writable($docroot . '/js/lang')) {
			$data['dirWlang']['success'] = false;
			$data['dirWlang']['error'] = 'Запись запрещена';
		} else {
			$data['dirWlang']['success'] = true;
		}
		
		/**
		 * Проверка возможности записи в каталог /system/config/report
		 */
		$data['dirWreports']['title'] = 'Возможность записи в каталог /system/config/report';
		if (!is_writable($docroot . '/system/config/report')) {
			$data['dirWreports']['success'] = false;
			$data['dirWreports']['error'] = 'Запись запрещена';
		} else {
			$data['dirWreports']['success'] = true;
		}
		
		/**
		 * Проверка возможности записи в каталог /.log
		 */
		$data['dirLog']['title'] = 'Возможность записи в каталог /.log';
		if (!is_writable($docroot . '/.log')) {
			$data['dirLog']['success'] = false;
			$data['dirLog']['error'] = 'Запись запрещена';
		} else {
			$data['dirLog']['success'] = true;
		}
		
//		var_dump($data);
//		die();
		
		Response::jsonSuccess($data);
	}
	public function dbcheckAction() {
		$host = Request::post('host', 'str', '');
		$port = Request::post('port', 'int', 0);
		$prefix = Request::post('prefix', 'str', '');
		
		if ($port != 0)
			$host .= ':' . $port;
			
		$params = array(
		    'host'           => $host,
		    'username'       => Request::post('dbuser', 'str', false),
		    'password'       => Request::post('dbpassword', 'str', false),
		    'dbname'         => Request::post('dbname', 'str', false)
		);
		
		$flag = false;
		if ($params['host'] && $params['username'] && $params['dbname'])
			try {
				$zendDb = Zend_Db::factory('Mysqli', $params);
				$zendDb->getServerVersion();
				$data['success'] = true;
				$data['msg'] = 'Проверка подключения прошла успешна, конфигурация подключения 
								сохранена для дольнейшего использования';
				
				$flag = true;
				
			} catch (Exception $e) {
				$data['success'] = false;
				$data['msg'] = 'Возникла ошибка при попытке подключения к БД
								проверьте правильность данных и повторите попытку';
			}
		else {
			$data['success'] = false;
			$data['msg'] = 'Порт, имя пользователя и имя БД обязательны';
		}
		if ($flag)
			try {
				$configName = $_SERVER['DOCUMENT_ROOT'] . '/system/config/db.php';
				if (Config_File_Array::create($configName) === false)
					throw new Exception();
				
				$config = Config::factory(Config::File_Array, $configName);
				$config->set('username', $params['dbname']);
				$config->set('password', $params['password']);
				$config->set('dbname', $params['dbname']);
				$config->set('host', $params['host']);
				$config->set('charset', 'UTF8');
				$config->set('prefix', $prefix);
				if (!$config->save())
					throw new Exception();
			} catch (Exception $e) {
				$data['success'] = false;
				$data['msg'] = 'Ошибка при сохранении конфига для подключения к БД. Возможно нет прав на запись в каталог /system/config/';
			}
		
		Response::jsonSuccess($data);
	}
	
	public function createtablesAction() {
		$docRoot = $_SERVER['DOCUMENT_ROOT'];
		$dbConfig = Config::factory(Config::File_Array, $docRoot . '/system/config/test_db_conf.php');
		Db_Object::setDbPrefix($dbConfig['prefix']);
		Db_Object::setDbConnection($zendDb = Zend_Db::factory('Mysqli', $dbConfig->__toArray()));
		
		$modulesConfig = Config::factory(Config::File_Array, $docRoot . '/install/cfg/modules.php')->__toArray();
		
		$dbObjectBuilder = Db_Object_Builder::getInstance();
		Db_Object::setConfigPath($docRoot . '/system/config/object/');
		
		if (!empty($modulesConfig))
			foreach ($modulesConfig as $v) {
				echo $dbObjectBuilder->build(new Db_Object($v)) , '<br><br><br>';
			}
		die();
		Response::jsonError();
	}
}